package com.bjsxt.util;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.Collections;
import java.util.List;

/**
 * description:
 * 获取当前登录用户相关信息的工具类
 *
 * @author ALIENWARE <br />
 * @date 2021/6/25
 */
public class SpringSecurityUtils {
    /**
     * 获取当前操作的用户对象 id
     *
     * @return 登录用户 id
     */
    public static Long getCurrentUserId() {
        // 从安全的上下文里面获取用户的对象
        Authentication authentication = getAuthentication();
        // 如果获取的对象是空
        if (authentication != null) {
            // userId ->Long  anonymousUser(没有登录访问的时候)
            String id = authentication.getPrincipal().toString();
            // 是因为用户没有登录访问时,就是这个用户
            if ("anonymousUser".equals(id)) {
                return null;
            }
            // 返回用户的 id
            return Long.valueOf(id);
        }
        // 返回空
        return null;
    }

    /**
     * 获取当前登录用户的权限对象
     *
     * @return 用户的权限对象集合
     */
    public static List<GrantedAuthority> getAuthorities() {
        // 从安全的上下文里面获取用户对象
        Authentication authentication = getAuthentication();
        // 如果当前获取的用户对象是空 则返回空集合，否则继续操作
        if (authentication != null) {
            // 获取出当前的用户权限集合并返回
            return (List<GrantedAuthority>) authentication.getAuthorities();
        }
        // 返回空集合
        return Collections.EMPTY_LIST;
    }

    /**
     * 获取安全的上下文对象
     *
     * @return 安全上下文对象
     */
    public static Authentication getAuthentication() {
        // 获取安全上下文对象
        return SecurityContextHolder.getContext().getAuthentication();
    }
}
